const ReqType = {
  GET: 'get',
  POST: 'post'
}

/**
 * 这个是请求TCBRouter，注意这里的 $url
 * 如果是一般的请求，不用这个
 */
const formatName = (name, data) => {
  /**
   * 如果是'/manage/category/list'，会变成
   * [ '', 'manage', 'category', 'list' ]
   */
  const list = name.split('/')
  const newName = `forwx-${list[1]}`
  const resultData = {
    name: newName,
    data: {
      $url: name,
      other: {
        ...data
      },
    },
  }

  return {
    ...resultData,
  }
}

/**
 * 转移到云函数
 */
const ajax = (url, data = {}, type = ReqType.GET) => {
  const dataObj = formatName(url, data)

  return new Promise((resolve, reject) => {
    wx.cloud
      .callFunction(dataObj)
      .then(res => resolve(res))
      .catch(err => console.log('错误信息:' + JSON.stringify(err)))
  })
}

export const testHello = async () => ajax('/hello')
/**
 * 检查当前token是否在Authing中验证通过，用于app.js中的“验证token是否可用”。
 * 如果可用，表示微信已经在Authing中登录了。
 */
export const checkTokenByAuthing = async () => ajax('/checkTokenByAuthing')
/**
 * 将authing.loginWithWxapp(code, res)得到的数据保存在service中。
 */
export const saveLoginWithAppInfo = async data => ajax('/saveLoginWithAppInfo', data, ReqType.POST)
/**
 * 如果client存储有 _id，那么根据_id查找到service的userinfo，并且对比传送过来的userinfo。
 * 如果两个userinfo对不上，那么就表示client已经切换微信号了。
 * 告诉client需要重新登录authing。
 */
export const getUserInfoByIdAuthing = async data => ajax('/getUserInfoByIdAuthing', data)
/**
 * 检查是否切换账号
 */
export const getIsChangeWeChat = async data => ajax('/isChangeWeChat', data)
/**
 * 检查是否有这个账号
 */
export const hasWeChat = async data => ajax('/hasWeChat', data)
/**
 * 登录的时候获取用户的信息
 */
export const reqGetUserInfo = async code => ajax('/login/getUserInfo', {
  code
}, ReqType.POST)

/**
 * 获取index页面的所有信息
 */
export const reqIndex = async () => ajax('/go/initIndex')

/**
 * 点击首页轮播图之后展示的图片
 * 这里的输入参数，远不止index。应该是有一个特殊的标志，显示输入的内容。
 * 例如：
 * detail_one, index
 * detail_one表示页面，index表示第几号数据。
 */
export const reqSwiperDetail = async index => ajax('/index')

/**
 * 连接自己的服务器，登录
 */
export const reqLogin = data => ajax('/login', data, ReqType.POST);

/**
 * 初始化 detail_two 中的标题图片数据
 * 
 * 和admin公用一个函数
 * 已经移植到云函数中
 */
export const reqDetailTwoTitleImages = () => ajax('/go/imagesOfTitles');

/**
 * 初始化 永昌服务 detail_two 中的剩余数据
 * 已经移植到云函数中
 */
export const reqServeDetailTwo = () => ajax('/go/serveDetailTwo');

/**
 * 初始化 案例展示 detail_two 中的剩余数据
 * 已经移植到云函数中
 */
export const reqShowDetailTwo = () => ajax('/go/showDetailTwo');

/**
 * 留言板发送消息给服务器
 * 已经移植到云函数中
 */
export const reqMessageBoard = async data => ajax('/go/messageBoard', data, ReqType.POST);


/**
 * 精选案例中的初始化信息
 * 注意这里的返回数据，例如：精选案例/家居软装。仅仅需要10个，往下拉的时候会异步加载数据。
 * 
 * 已经移植到云函数中
 */
export const reqExamples = async data => ajax('/examples/index', data);
/**
 * 精选案例中的每一篇文章的详细信息展示。
 * 浏览数，点赞数和留言板
 * 
 * 已经移植到云函数中
 */
export const reqDetailExamples = async (data = {}) => ajax('/examples/detail', data);
/**
 * 文章的阅读数、点赞数和留言信息
 * 
 * @param {*} data 
 */
export const updateDetailExamples = async (data = {}) => ajax('/examples/detailUpdate', data, ReqType.POST);
/**
 * 文章的收藏和点赞
 * 其实这两个功能是一样的，这里是我设计得不好，懒得改了。
 * 
 * 已经移植到云函数中
 * @param {*} data 
 */
export const reqCollection = async (data = {}) => ajax('/examples/collection', data, ReqType.POST);
/**
 * 获取当前用户已经收藏的文章列表，在“用户中心”中使用。
 * 
 * 已经移植到云函数中
 * @param {*} data 
 */
export const reqGetCollections = async () => ajax('/examples/getCollections');
/**
 * 获取精选案例的轮播图
 * 
 * 已经移植到云函数中
 */
export const reqExampleSwiperPicturesTabs = async () => ajax('/examples/swiperPictures');
/**
 * 点赞
 * data中包含：传入文章_articleId/评论的_commentId
 */
export const clickLikes = async (data = {}) => ajax('/examples/clickLikes', data, ReqType.POST);
/**
 * 获取当前用户已经咨询的问题，在“用户中心”中使用。
 * 
 * 已经移植到云函数中
 * @param {*} data 
 */
export const reqGetAsks = async () => ajax('/ask/getAsks');
/**
 * 装修咨询，初始化请求数据
 */
export const reqAsk = async (data = {}) => ajax('/ask/index');
/**
 * 装修详情页面提交咨询信息，姓名、联系电话等。
 */
export const reqAskDetailSubmit = async (data = {}) => ajax('/ask/detailSubmit', data, ReqType.POST);
/**
 * 获取装修种类下面的所有分类
 * 已经移植到云函数中
 */
export const reqDecorationType = async () => {
  const parentId = "5df0e327cdaeae3670403134"
  return ajax('/manage/category/list', {
    parentId
  })
};
/**
 * 获取其他种类下面的所有分类
 * 已经移植到云函数中
 */
export const reqOtherType = async () => {
  const parentId = "5df2097206c387360c5c29a0"
  return ajax('/manage/category/list', {
    parentId
  })
};
/**
 * 获取公司信息
 */
export const reqGetCompanyInfo = async () => ajax('/manage/getCompanyInfo');